
export const TO_CART = 'to_cart'
export const ADD_TO_CART = 'ADD_TO_CART'
export const REMOVE_TO_CART = 'REMOVE_TO_CART'
export const DIALOG_EVENT_CLICK = 'DIALOG_EVENT_CLICK'

const cart = {
  namespaced: true, // 命名-空间
  state: {
    cartList: JSON.parse(localStorage.getItem('cart')) || [],
    isShow: false,
    isBtn: '',
    removeIndex: ''
  },
  mutations: {
    // 加入购物车数据
    [TO_CART](state, item) {
      // 1. 去重过滤 2. 加入购物车 // find findIndex {id: name: city}
      let goods = state.cartList.find(v => v.id === item.id)
      if (goods) { // 数据存在 让数据增加
        goods.count++;
      } else { // 数据不存在 
        item.count = 1;
        state.cartList.push(item)
      }
      console.log(state.cartList, '---------------')
    },
    // ++
    [ADD_TO_CART](state, index) {
      state.cartList[index].count++;
    },
    // -- 
    /**
     * 1. 点击减按钮的时候（ <-1），出弹出框
     * 2. 判断按钮是sure还是close的时候，isBtn后赋值
     * 
     */
    [REMOVE_TO_CART](state, index) {
      // 判断--- 弹出框判断
      if (state.cartList[index].count <= 1) {
        // 弹出框
        state.isShow = true;
        state.removeIndex = index;
        // console.log(state.isShow, '弹出框控制显示因此')
      } else {
        state.cartList[index].count--;
      }
    },
    [DIALOG_EVENT_CLICK](state, opt) {
      // 统一关闭弹出框 不管用户点击的是确定还是取消
      state.isShow = false;
      state.isBtn = opt.typeBtn // 告诉用户点的是那个按钮
      // console.log(state, 'is')
      if (state.isBtn === 'sure') {
        state.cartList.splice(state.removeIndex, 1)
      }
    }
  },
  actions: {
    updateDialog({ commit }, opt) {
      commit(DIALOG_EVENT_CLICK, opt)
    },
    updateToCart({ commit }, item) {
      commit(TO_CART, item)
    },
    updateAddCart({ commit }, index) {
      commit(ADD_TO_CART, index)
    },
    updateRemoveCart({ commit }, index) {
      commit(REMOVE_TO_CART, index)
    }
  },
  getters: {
    // 计算总价
    totalPrice(state) {
      return state.cartList.reduce((num, item) => {
        return num + item.count * item.price
      }, 0)
    }
  }
}

export { cart }
